﻿using RayDen.RayEngine.Core;
using RayDen.RayEngine.Core.Interface;
using RayDen.RayEngine.Samplers;

namespace RayDen.RayEngine
{
    public interface IDataStructure
    {
        TDataItem GetDataItem<TDataItem>(int key);
    }

    public interface IDataStructureSampler
    {

    }

    public interface IDataStructure<TDataItem> : IDataStructure
    {
        void Add(TDataItem item);
        void Clear();
    }


    public interface IPathBuilder : IPathProcessor
    {
        
    }



    public abstract class BuilderThread : GenericDeviceRenderThreadBase<IPathBuilder, IDataStructure>
    {
        protected internal IDataStructure Data;

        protected BuilderThread(int index, RayEngineScene scn, IDataStructure data) : base(index, scn)
        {
            this.Data = data;
        }

        protected BuilderThread( int index,
                                       IIntersectionEngine device,
                                       RayEngineScene scn,
                                       bool lowLatency,
                                       IDataStructure pixelDevice,
                                       SamplingContext sc )
            : base(index, scn)
        {
            Init(device, lowLatency, pixelDevice, sc);
        }

    }
}